class Widget {
	constructor(element, options = {}) {
		// 初始化 element
		this.initElement(element);


		// 初始化 attrs
		this.attrs = this.initAttrs(options);

		// 初始化 events
		this.initEvents();

		// 子类自定义的初始化
		this.setup();
	}

	initElement(element) {
		this.el = $(element);

		// 如果对应的 DOM 元素不存在，则报错
		if (!this.el || !this.el[0]) {
			throw new Error('el is invalid');
		}

		this.element = this.el[0];
	}

	initAttrs(attrs = {}) {
		return attrs;
	}

	initEvents() {}

	get(attrName) {
		if (!attrName) { return; }
		if (this.attrs && (this.attrs[attrName] !== undefined)) {
			return this.attrs[attrName];
		}
	}

	set(attrName, value) {
		if (this.attrs && (this.attrs[attrName] !== undefined)) {
			this.attrs[attrName] = value;
		}
	}

	// 子类自定义的初始化
	setup() {}

	// 子类自定义的渲染
	render() {}

	// 在 this.el 内寻找匹配节点
	$(selector) {
		return this.el.find(selector);
	}
}

window.FM._Event.mixTo(Widget);

export default Widget;
